Skip to content

fix(server-nestjs): make Registry create paths idempotent - #2632

Open
shikanime wants to merge 2 commits into
mainfrom
fix/registry-create-idempotent
Open

fix(server-nestjs): make Registry create paths idempotent#2632
shikanime wants to merge 2 commits into
mainfrom
fix/registry-create-idempotent

Conversation

@shikanime

@shikanime shikanime commented Aug 28, 2026

Copy link
Copy Markdown
Member

Issues liées

#2620 (fermer délibérément après la fusion)


Quel est le comportement actuel ?

Lors d'une synchronisation concurrente (cron + événement), deux appels peuvent tenter de créer la même ressource Harbor en parallèle. Le POST perdant reçoit une erreur 409 (conflit) et la synchronisation échoue avec une erreur.

Quatre chemins de création sont concernés : la création de projet, l'ajout d'un membre de groupe, la création d'un robot et la création d'une stratégie de rétention. Chacun était protégé par un GET d'existence préalable dans la couche métier, mais sous une course cette garde ne suffisait pas.

Comportement attendu

L'idempotence est encapsulée dans le service client (registry-client.service.ts) sous un motif ensure* create-first : on tente la création ; si la ressource existe déjà (409), on la met à jour puis on relit l'état courant. La synchronisation devient idempotente face à la course.

Changements

  • registry-client.service.ts expose ensureProject, ensureGroupMember, ensureRobot et ensureRetention : chaque méthode tente la création, puis réconcilie sur un 409.
  • Création de projet : un 409 est toléré, la ressource est relue puis retournée.
  • Ajout de membre de groupe : un 409 est ignoré, le membre existe désormais.
  • Création de robot : un 409 renvoie null, la couche métier déclenche une rotation pour obtenir un secret frais.
  • Stratégie de rétention : un 409 déclenche une relecture puis une mise à jour.
  • La couche métier (registry.service.ts) est simplifiée : elle appelle les méthodes ensure* et ne gère plus les statuts 409 elle-même.
  • Ajout de tests unitaires (client et service) couvrant les collisions sur la création de projet, de robot et le retour de l'existant.

@shikanime
shikanime requested a review from a team as a code owner August 28, 2026 17:05
Signed-off-by: William Phetsinorath <william.phetsinorath-open@interieur.gouv.fr>
Change-Id: Icef5672b7cc38801260f64eb34569a716a6a6964
@shikanime
shikanime force-pushed the fix/registry-create-idempotent branch from 2212abf to 9fe52fc Compare August 28, 2026 17:07
Signed-off-by: William Phetsinorath <william.phetsinorath-open@interieur.gouv.fr>
Change-Id: Ie82b4c47953aa13959e3dd34fb99afba6a6a6964
@shikanime shikanime changed the title chore(registry): make create paths idempotent and clean up comments fix(server-nestjs): make Registry create paths idempotent Aug 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant